package com.hyw.trace.configuration.meta;

/**
 * 收集器的抽象定义: 如何对数据做清洗,以及转储至远程.
 * <p>
 * 考虑到数据清洗,有可能是多端进行, 即一个样本数据,有可能存在多种不同的清洗方式,故,对于样本数据的传递需要构造一个处理链条来逐级处理
 * 
 * @author hongyu
 * @param <T>转储器的期望值
 * @param <S>收集器的期望值
 */
public abstract class TraceCollector<S extends TraceEvent, T> {

  protected IEventStorage<T> storage;

  /**
   * 明确指定收集后的数据需要做的转储方式
   * 
   * @param storage
   *          转储器的具体实现
   */
  public TraceCollector(IEventStorage<T> storage) {
    this.storage = storage;
  }

  /**
   * @param event
   *          自定义收集的消息类型
   */
  public abstract void collect(S event);

  /**
   * 由于TraceEvent至少有不同的分组,涉及到不同的收集器. 该方法用于标记当前收集器是否要处理此类消息
   * 
   * @param event
   *          自定义收集的消息类型
   * @return 标记当前收集器是否能做此类消息的处理
   */
  public abstract boolean isSupport(S event);

}